import axios from 'axios'
import Base from '../Base64.js'
import router from '@/router'
import Cookies from 'js-cookie'

// 1.新建axios实例
const instance = axios.create({
	baseURL: 'http://192.168.1.54:8081/m.api', // url
	timeout: 5000 // 请求超时
})

// 2.拦截器的配置
// 2.1 请求拦截
// 添加请求拦截器

instance.interceptors.request.use((config) => {
	// console.log(Cookies.get('AdminToken'),"45645564")
	// 在发送请求之前做些什么//token
	config.headers.AdminToken = Cookies.get('AdminToken')
	return config
}, function(error) {
	return Promise.reject(error)
})

// // 2.2 响应拦截
// // 添加响应拦截器---无限刷新令牌，无痛刷新，令牌刷新
instance.interceptors.response.use((response) => {
		// console.log('response', response);
		const code = response.data.errno
		if (code == 10001 || code == 10006) {
			// console.log('user', Cookies.get('user'))
			if (Cookies.get('name') && Cookies.get('password')) {
				return login(response)
			} else {
				router.replace('/About') // 未存储时跳转登录页面
			}
		} else {
			// 否则返回数据
			return response
		}

		// 对响应数据做点什么
		// 根据返回的状态码来做相对应的事情--10001  10006这个两个状态码需要做令牌刷新的功能
		// 1.获取到登录的账户和密码
		// 2.重新登录
		// 3.把重新登录之后的token重新赋值给请求头（aysnc---await）
		return response
	},
	(error) => {
		// 对响应错误做点什么
		return Promise.reject(error)
	}
)

// 只有async函数内部的异步操作执行完，才会执行then方法指定的回调函数。
async function login(response) {
	// let encryption = eval('(' + Cookies.get("Login") + ')');
	const name = Cookies.get('name')
	const password = Cookies.get('password')
	const res = await instance({
		method: 'get',
		params: {
			_gp: 'admin',
			_mt: 'login',
			username: Base.decode(name),
			password: Base.decode(password),
			verifyCode: '666666'
		}
	})
	if (res.data.errmsg == '成功') {
		// let seconds = 1200;
		const sj = new Date(new Date().getTime() + 30 * 60 * 1000)
		Cookies.set('AdminToken', res.data.data, {
			expires: sj
		})
		response.config.headers.AdminToken = res.data.data
		return await axios(response.config) // 返回改变后的配置
	}
}

export default instance
